"""
Title: 杨辉三角形又称Pascal三角形，它的第i+1行是(a+b)i的展开式的系数。
 它的一个重要性质是：三角形中的每个数字等于它两肩上的数字相加。

 例如，下面给出了杨辉三角形的前4行：
    1
   1 1
  1 2 1
 1 3 3 1
 @description 递归获取杨辉三角指定行、列(从0开始)的值
              注意：与是否创建杨辉三角无关
"""


def get_value(raw, column):
    if column > raw:
        raise ValueError
    if raw == 1:
        return 1
    return get_value_list(raw)[column-1]


def get_value_list(raw):
    if raw == 1:
        return [1]
    elif raw == 2:
        return [1, 1]
    t = get_value_list(raw - 1)
    return [1] + [t[i] + t[i + 1] for i in range(len(t) - 1)] + [1]


if __name__ == "__main__":
    print(get_value_list(1))
    print(get_value_list(2))
    print(get_value_list(3))
    print(get_value_list(4))
    print(get_value_list(5))
    print(get_value_list(6))
    print(get_value_list(7))
    print(get_value_list(100))

    print(get_value(4, 3))
    print(get_value(5, 3))
    print(get_value(6, 3))
    print(get_value(7, 3))
    print(get_value(8, 3))
    print(get_value(100, 3))